package org.lanqiao.tjut.test;

import java.util.Arrays;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.lanqiao.tjut.db.DBDriver;
import org.lanqiao.tjut.db.DBProviderFactory;
import org.lanqiao.tjut.mapping.IStuBeanMapper;
import org.lanqiao.tjut.mapping.UsersEntityMapper;
import org.lanqiao.tjut.orm.StuBean;
import org.lanqiao.tjut.orm.UsersEntity;
import org.lanqiao.tjut.orm.UsersEntity2;

public class MybatisTestDriver2 {
	@Test
	public void testMybatis_selectUsersInfoList() {
		// 1 获取Mybatis的属性配置文件信息
		// InputStream is =
		// MybatisTestDriver2.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
		// 2 获取sqlsessionFactory对象
		SqlSessionFactory sessionFactory = DBDriver.getNewInstanceSessionFactory();
		// 3 获取sqlsession对象，进行数据库操作
		SqlSession session = sessionFactory.openSession();// 默认事务是开启的
		// 4 打开sqlsession对象，调用映射配置中的sql语句进行数据操作
		List<UsersEntity> lstUers = session
				.selectList("org.lanqiao.tjut.mapping.UsersEntityMapper.selectUsersInfoList");
		// 5 获取数据库操作结果集，并进行遍历显示
		System.out.println("查询结果：" + lstUers.toString());
		// 6 关闭session对象，回收资源（如果是新增、删除、修改等操作需要提交事务 需要调用 commit方法）
		session.commit();
		session.close();
	}

	@Test
	public void testMybatis_selectUsersInfoList_02() {
		// 2 获取sqlsessionFactory对象
		SqlSessionFactory sessionFactory = DBDriver.getNewInstanceSessionFactory();
		// 3 获取sqlsession对象，进行数据库操作
		SqlSession session = sessionFactory.openSession(); // 打开事务
		// 4 使用session对象获取mapper接口的实现类对象（实现类不需要手动去写），调用映射配置中的sql语句进行数据操作
		UsersEntityMapper userM = (UsersEntityMapper) DBProviderFactory.getDBProviderInstance()
				.getNewInstanceMapper(session, UsersEntityMapper.class);
		// 5 获取数据库操作结果集，并进行遍历显示
		List<UsersEntity> lstUers = userM.selectUsersInfoList();
		// LogFactory.useCommonsLogging();
		System.out.println("查询结果：" + lstUers.toString());
		// 6 关闭session对象，回收资源
		session.commit(); // 提交事务
		session.close();
	}

	@Test
	public void testMybatis_selectUsersInfoByParas_03() {
		// 2 获取sqlsessionFactory对象
		SqlSessionFactory sessionFactory = DBDriver.getNewInstanceSessionFactory();
		// 3 获取sqlsession对象，进行数据库操作
		SqlSession session = sessionFactory.openSession(); // 打开事务
		// 4 使用session对象获取mapper接口的实现类对象（实现类不需要手动去写），调用映射配置中的sql语句进行数据操作
		UsersEntityMapper userM = (UsersEntityMapper) DBProviderFactory.getDBProviderInstance()
				.getNewInstanceMapper(session, UsersEntityMapper.class);
		// 5 获取数据库操作结果集，并进行遍历显示
		// 查询条件
		UsersEntity2 userB2 = new UsersEntity2();
		// 姓名参数条件
		userB2.setUser_name("小");
		// 年龄参数条件
		userB2.setUser_age(32);
		List<UsersEntity2> lstUers = userM.selectUsersInfoByParas(userB2);
		// LogFactory.useCommonsLogging();
		System.out.println("查询结果：" + lstUers.toString());
		// 6 关闭session对象，回收资源
		session.commit(); // 提交事务
		session.close();
	}

	@Test
	public void testMybatis_selectUsersInfoByParas_04() {
		// 2 获取sqlsessionFactory对象
		SqlSessionFactory sessionFactory = DBDriver.getNewInstanceSessionFactory();
		// 3 获取sqlsession对象，进行数据库操作
		SqlSession session = sessionFactory.openSession(); // 打开事务
		// 4 使用session对象获取mapper接口的实现类对象（实现类不需要手动去写），调用映射配置中的sql语句进行数据操作
		UsersEntityMapper userM = (UsersEntityMapper) DBProviderFactory.getDBProviderInstance()
				.getNewInstanceMapper(session, UsersEntityMapper.class);
		// 5 获取数据库操作结果集，并进行遍历显示
		// 查询条件
		UsersEntity2 userB2 = new UsersEntity2();
		// 姓名参数条件
		userB2.setUser_name("小");
		// 年龄参数条件
		userB2.setUser_age(32);
		userB2.setLstAges(Arrays.asList(22, 23, 21, 24));
		List<UsersEntity2> lstUers = userM.selectUsersInfoByParas(userB2);
		// LogFactory.useCommonsLogging();
		System.out.println("查询结果：" + lstUers.toString());
		// 6 关闭session对象，回收资源
		session.commit(); // 提交事务
		session.close();
	}

	@Test
	public void testMybatis_selectStuInfo_05() {
		// 2 获取sqlsessionFactory对象
		SqlSessionFactory sessionFactory = DBDriver.getNewInstanceSessionFactory();
		// 3 获取sqlsession对象，进行数据库操作
		SqlSession session = sessionFactory.openSession(); // 打开事务
		// 4 使用session对象获取mapper接口的实现类对象（实现类不需要手动去写），调用映射配置中的sql语句进行数据操作
		IStuBeanMapper stuM = (IStuBeanMapper) DBProviderFactory.getDBProviderInstance().getNewInstanceMapper(session,
				IStuBeanMapper.class);
		// 5 获取数据库操作结果集，并进行遍历显示

		List<StuBean> lstStus = stuM.selectStuInfo(1);
		// 遍历结果
		for (StuBean stuBean : lstStus) {

			System.out.println("查询结果：" + stuBean.toString());
		}
		// 6 关闭session对象，回收资源
		session.commit(); // 提交事务
		session.close();
	}
}
